#include<bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;     // 使用标准命名空间

int n, a[10001] = {1};   // 定义全局变量：n为输入的整数，a数组用于存储分解的结果，初始化为{1}

void split(int s, int t); // 声明函数split，用于递归分解整数
void print(int t);        // 声明函数print，用于输出分解结果

int main()
{
    cin >> n;             // 从标准输入读取整数n
    split(n, 1);          // 调用split函数开始分解整数n，初始位置为1
    return 0;             // 程序正常结束
}

// 递归函数，用于将整数s分解为若干个整数的和
// s: 当前需要分解的整数
// t: 当前分解结果在数组a中的位置
void split(int s, int t)
{
    // 从a[t-1]开始尝试分解，确保分解的数是递增的
    for(int i = a[t - 1]; i <= s; i++)
    {
        if (i < n)        // 确保分解的数小于n
        {
            a[t] = i;     // 将当前分解的数i存入数组a的第t个位置
            s -= i;       // 从s中减去i，继续分解剩余的部分
            if (s == 0)   // 如果s已经被完全分解
                print(t); // 调用print函数输出当前的分解结果
            else
                split(s, t + 1); // 否则递归分解剩余的部分，位置t+1
            s += i;       // 回溯，恢复s的值，尝试其他分解方式
        }
    }
}

// 输出函数，用于输出数组a中的分解结果
// t: 当前分解结果在数组a中的位置
void print(int t)
{
    for(int i = 1; i <= t - 1; i++) // 遍历数组a，输出前t-1个数
        printf("%d+", a[i]);
    printf("%d\n", a[t]); // 输出最后一个数并换行
}